/*
 * @(#)ResultPageInfo.java $version 2010. 8. 11
 *
 * Copyright 2007-2010 NHN Corp. All rights Reserved. 
 * NHN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package com.nhncorp.usf.core.config.runtime;

import java.util.Properties;

/**
 * 이동할 페이지 정보( {@link DISPATCHER_TYPE}, 이동경로) 정의.
 * 기본 페이지 타입은 {@link DISPATCHER_TYPE#template} 이다.
 *
 * @author Web Platform Development Team.
 */
public class ResultPageInfo {
    String id;

    String src;

    /**
     * Result 페이지 생성을 위한 속성리스트.
     */
    Properties properties = new Properties();

    /**
     * Result 페이지 생성에 사용될 상수값.
     */
    Properties requestParams = new Properties();

    /**
     * Result 결과에 대한 dispatcher 방법
     */
    public static enum DISPATCHER_TYPE {
        template, forward, redirect, direct, mock;

        /**
         * Gets the dispatcher type.
         *
         * @param dispatcherType the dispatcher type
         * @return the dispatcher type
         */
        public static DISPATCHER_TYPE getDispatcherType(String dispatcherType) {
            DISPATCHER_TYPE result = template;

            for (DISPATCHER_TYPE type : DISPATCHER_TYPE.values()) {
                if (type.name().equalsIgnoreCase(dispatcherType)) {
                    result = type;
                    break;
                }
            }

            return result;
        }

        /**
         * Equals.
         *
         * @param dispatcherType the dispatcher type
         * @param type           the type
         * @return true, if successful
         */
        public static boolean equals(DISPATCHER_TYPE dispatcherType, String type) {
            return dispatcherType.name().equalsIgnoreCase(type);
        }
    }

    /**
     * Result 결과에 대한 dispatcher
     */
    private DISPATCHER_TYPE dispatcherType = DISPATCHER_TYPE.template;

    /**
     * 생성자
     */
    public ResultPageInfo(DISPATCHER_TYPE type, String src) {
        this.dispatcherType = type;
        this.src = src;
    }

    /**
     * 생성자
     */
    public ResultPageInfo(String src) {
        this.src = src;
    }

    /**
     * Page 식별자 반환.
     *
     * @return id the result page id
     */
    public String getId() {
        return this.id;
    }

    /**
     * Page 식별자 설정.
     *
     * @param id the result page id
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * dispathcer 타입 반환.
     *
     * @return DISPATCHER_TYPE the dispatcher type name
     */
    public DISPATCHER_TYPE getDispatcherType() {
        return this.dispatcherType;
    }

    /**
     * 이동할 페이지의 경로 또는 freemarker/html script.
     *
     * @return src the page path
     */
    public String getSrc() {
        return this.src;
    }

    /**
     * Result 페이지 생성을 위한 속성 {@link Properties} 반환.
     *
     * @return Properties the page property
     */
    public Properties getProperties() {
        return this.properties;
    }

    /**
     * Result 페이지 생성을 위한 속성 {@link Properties} 설정.
     *
     * @param properties the page property
     */
    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    /**
     * Result 페이지 생성을 위한 dynamic configuration에서 inject할 수 있는 parameter {@link Properties} 반환.
     *
     * @return Properties the request parameter
     */
    public Properties getRequestParams() {
        return requestParams;
    }

    /**
     * Result 페이지 생성을 위한 dynamic configuration에서 inject할 수 있는 parameter {@link Properties} 설정.
     *
     * @param requestParams the request parameter
     */
    public void setRequestParams(Properties requestParams) {
        this.requestParams = requestParams;
    }
}
